package top.zhimingw.service;

import top.zhimingw.pojo.Article;
import top.zhimingw.pojo.ArticleDateArchive;

import java.util.Date;
import java.util.List;

/**
 * @InterfaceName ArticleService
 * @Description (Article)表服务接口
 * @Author:zhimingw
 * @Version 1.0
 * @since 2021/5/30 20:54
 */
public interface ArticleService {
    /**
    * @Description: 添加Article
    * @Param: [article]
    * @return: boolean
    * @Author: zhimingw
    * @Date: 2021/5/30
    */
    boolean insert(Article article);

    /**
    * @Description: 删除Article
    * @Param: [id]
    * @return: boolean
    * @Author: zhimingw
    * @Date: 2021/5/30
    */
    boolean deleteById(Integer id);

    /**
    * @Description: 查询单条数据
    * @Param: [id]
    * @return: top.zhimingw.pojo.Article
    * @Author: zhimingw
    * @Date: 2021/5/30
    */
    Article queryById(Integer id);

    /**
    * @Description: 修改数据，哪个属性不为空就修改哪个属性
    * @Param: [article]
    * @return: boolean
    * @Author: zhimingw
    * @Date: 2021/5/30
    */
    boolean update(Article article);

    /**
    * @Description: 根据条件获取文章数量
    * @Param: [status]
    * @return: java.lang.Integer
    * @Author: zhimingw
    * @Date: 2021/5/30
    */
    Integer totalCount(Integer status);


    /**
    * @Description: 获取阅读量最高的文章
    * @Param: []
    * @return: java.util.List<top.zhimingw.pojo.Article>
    * @Author: zhimingw
    * @Date: 2021/6/1
    */
    List<Article> orderByReadCount();


    /**
    * @Description: 获得文章日期归档
    * @Param: []
    * @return: java.util.List<top.zhimingw.pojo.ArticleDateArchive>
    * @Author: zhimingw
    * @Date: 2021/6/1
    */
    public List<ArticleDateArchive> getArchive();
    
    /**
    * @Description: 根据发表时间降序获取文章
    * @Param: [page]
    * @return: java.util.List<top.zhimingw.pojo.Article>
    * @Author: zhimingw
    * @Date: 2021/5/31
    */
    List<Article> orderByPublishTime(Integer page);
    
    /**
    * @Description: 阅读文章 ,阅读量加1
    * @Param: [id]
    * @return: void
    * @Author: zhimingw
    * @Date: 2021/6/8
    */
    void addReadCount(Integer id);

    /**
    * @Description: 根据Id获取阅读量
    * @Param: [id]
    * @return: java.lang.Integer
    * @Author: zhimingw
    * @Date: 2021/6/8
    */
    Integer getReadCount(Integer id);
    
    /**
    * @Description: 获取ES中文档的数量
    * @Param: []
    * @return: long
    * @Author: zhimingw
    * @Date: 2021/6/30
    */
    long getEsDocCount();
    
    /**
    * @Description: 初始化ES
    * @Param: []
    * @return: void
    * @Author: zhimingw
    * @Date: 2021/7/1
    */
    void initEs();

    /**
    * @Description: 从ES中搜索
    * @Param: [content]
    * @return: java.util.List<top.zhimingw.pojo.Article>
    * @Author: zhimingw
    * @Date: 2021/7/1
    */
    List<Article> searchFromEs(String content);
    
    /**
    * @Description: 根据标签ID获取已发布的文章
    * @Param: [id]
    * @return: java.util.List<top.zhimingw.pojo.Article>
    * @Author: zhimingw
    * @Date: 2021/7/1
    */
    List<Article> findByTagId(Integer id);
    
    /**
    * @Description: 根据文集ID获取已发布的文章
    * @Param: [id]
    * @return: java.util.List<top.zhimingw.pojo.Article>
    * @Author: zhimingw
    * @Date: 2021/7/1
    */
    List<Article> findByKindId(Integer id);
    
    /**
    * @Description: 根据日期归档获取文章
    * @Param: [date]
    * @return: java.util.List<top.zhimingw.pojo.Article>
    * @Author: zhimingw
    * @Date: 2021/7/1
    */
    List<Article> findByDate(Date date);
    
    /**
    * @Description: 根据Id获得文章标题
    * @Param: [aId]
    * @return: java.lang.String
    * @Author: zhimingw
    * @Date: 2021/7/7
    */
    String getTitle(Integer aId);
    
    /**
    * @Description: 根据状态获取文章
    * @Param: [status]
    * @return: java.util.List<top.zhimingw.pojo.Article>
    * @Author: zhimingw
    * @Date: 2021/7/11
    */
    List<Article> queryByStatus(Integer status);
    
    /**
    * @Description: 删除全部回收站文章
    * @Param: []
    * @return: java.lang.Integer
    * @Author: zhimingw
    * @Date: 2021/7/16
    */
    Integer deleteTrash();

    /**
     * @Description: 发布文章
     * @Param: [title, content, tags, kind, introduce, status]
     * @return: java.lang.Integer
     * @Author: zhimingw
     * @Date: 2021/7/21
     */
    Integer publish(String title,String content,String tags,String kind,String introduce,Integer status);

    /**
     * @Description: 更新文章
     * @Param: [id, title, content, tags, kind, introduce, status]
     * @return: boolean
     * @Author: zhimingw
     * @Date: 2021/7/21
     */
    boolean update(Integer id,String title,String content,String tags,String kind,String introduce,Integer status);

}
